#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QThread>
#include <QDebug>
#include <QSerialPortInfo>
#include <QThread>
#include <QTime>
#include "serialserver.h"

static const unsigned int  use_BAUD[8]={1200,2400,4800,9600,19200,38400,57600,115200};
static const QSerialPort::StopBits use_STOPBITS[4]={QSerialPort::OneStop,QSerialPort::OneAndHalfStop,QSerialPort::TwoStop,QSerialPort::UnknownStopBits};
static const QSerialPort::Parity use_PARITY[5]={QSerialPort::NoParity,QSerialPort::EvenParity,QSerialPort::OddParity,QSerialPort::SpaceParity,QSerialPort::MarkParity};
static const QSerialPort::DataBits use_DATABITS[4]={QSerialPort::Data5,QSerialPort::Data6,QSerialPort::Data7,QSerialPort::Data8};


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public:
    void initControlProcess();  // 控件初始化

    void FillSerialControl();   // 填充串口控件数据

    void updateControlState(bool flag); // 控件状态更新

    void displaySendData(const QByteArray &data);   // 显示发送数据

    void appendColoredText(const QString &prefix, const QString &data, const QColor &color);    // 颜色区分数据

    QString formatDataBasedOnHexCheck(const QByteArray &data);

private slots:
    void on_pushButton_Connect_clicked();

    void on_pushButton_update_clicked();

    void on_pushButton_disConnect_clicked();

    void on_pushButton_cleanrecv_clicked();


    void on_pushButton_send_clicked();

    void on_pushButton_cleansend_clicked();

    void on_checkBox_Hex_stateChanged(int arg1);


    void onSerialDataReceived(const QByteArray &data);  // 接收的串口数据

        void updateButtonState_cleanrecv();         // 接收区/发送区状态判断
        void updateButtonState_cleansend();


private:
    Ui::MainWindow *ui;
    SerialServer *serialServer;
        QThread *serialThread;
};
#endif // MAINWINDOW_H
